From 40bb7e962a1322345952d7acb24f506bb181b5d9 Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Fri, 24 Feb 2006 14:03:07 -0700 Subject: [PATCH] [IA64] SMP_HOST: map pal code on smp host On up host, only when rr7 is changed, efi_map_pal_code() is called to remap pal code on new rr7. But on smp host, efi_map_pal_code is also called to map pal code for other processors, which may not satisfy rr7 change condition, thus pal code may not be mapped in some processors, while ia64_pal_halt_light called in startup_cpu_idle_loop will cause machine crash. Signed-off-by: Anthony Xu --- xen/arch/ia64/linux-xen/efi.c | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/xen/arch/ia64/linux-xen/efi.c b/xen/arch/ia64/linux-xen/efi.c index d42935ddea..54a5c72541 100644 --- a/xen/arch/ia64/linux-xen/efi.c +++ b/xen/arch/ia64/linux-xen/efi.c @@ -534,32 +534,9 @@ efi_map_pal_code (void) { #ifdef XEN u64 psr; - static unsigned long last_rr7 = 0; - unsigned long current_rr7 = ia64_get_rr(7L<<61); - - // this routine is called only once in Linux but may be called - // multiple times in Xen. However, we only need to flush and - // reset itr[IA64_TR_PALCODE] if rr7 changes if (!pal_vaddr) { pal_vaddr = efi_get_pal_addr (); - last_rr7 = current_rr7; - } - else if (last_rr7 == current_rr7) return; - else { - last_rr7 = current_rr7; - printk("efi_map_pal_code,remapping pal w/rr7=%lx\n",last_rr7); } - - printf("efi_map_pal_code: about to ia64_ptr(%d,%p,%p)\n", - 0x1, GRANULEROUNDDOWN((unsigned long) pal_vaddr), - IA64_GRANULE_SHIFT); - ia64_ptr(0x1, GRANULEROUNDDOWN((unsigned long) pal_vaddr), - IA64_GRANULE_SHIFT); - ia64_srlz_i(); - printf("efi_map_pal_code: about to ia64_itr(%p,%p,%p,%p,%p)\n", - 0x1, IA64_TR_PALCODE, GRANULEROUNDDOWN((unsigned long) pal_vaddr), - pte_val(pfn_pte(__pa(pal_vaddr) >> PAGE_SHIFT, PAGE_KERNEL)), - IA64_GRANULE_SHIFT); #else void *pal_vaddr = efi_get_pal_addr (); u64 psr; -- 2.30.2